package principal;

import hibernateDAOS.*;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import beans.*;

public class cargaDatos {

	/**
	 * @param args
	 * @throws RemoteException 
	 */
	public static void main(String[] args) throws RemoteException {
		
		sucursalWeb sw = new sucursalWeb();

		cargarDatos();
		cargarPlanesProduccion();
		
		
		
		//@SuppressWarnings("unused")
		//List<Mesa> mesas = MesaDAO.getInstancia().obtenerMesas();
		
	}
	private static void cargarDatos() {
		
		
		//List<Producto> lista = sw.listaReposicionInsumosSucursal();
		
		
		
		//sectores y mesas ========================================================
		Sector s;
		Mesa m;
		int capacidad=0;
		for(int i=1;i<=9;i++){//cargo los 6 sectores
			s = new Sector();
			s.setCantMaxMesas(10);
			s.setNroSector(i);
			s.setNombre("Sector"+i);
			SectorDAO.getInstancia().guardarSector(s);
			for(int j=1;j<=10;j++){//cargo las mesas de cada uno de los sectores
				m = new Mesa();
				if (j<=4) capacidad=4;
				else if  (j<=6) capacidad=6;
				else  capacidad=8;
					
				m.setcapacidad(capacidad);
				m.setNroSector(s.getNroSector());
				m.setestado("libre");
				m.setGrupo(-1);
				MesaDAO.getInstancia().guardarMesa(m);
			}
		}
		
		
		//Mozos ========================================================
		//18 mozos porque cada uno no puede atender mas de 5 mesas, sucursal caballito 90mesas
		nuevoMozo("BANEGAS, MAURICIO",5);
		nuevoMozo("BRITEZ, BLAS",6);
		nuevoMozo("GARCETE, FELIPE",7);
		nuevoMozo("RODRIGUEZ, RAMIRO",8);
		nuevoMozo("RODRIGUEZ, RAMIRO",7);
		nuevoMozo("ATILIO, JORGE",5);
		nuevoMozo("CHAPARRO, NESTOR",5);
		nuevoMozo("GARCIA, JAVIER",5);
		nuevoMozo("BEGUET, ADRIAN",8);
		nuevoMozo("TORRES, CARLOS",8);
		nuevoMozo("ROMERO, MAURICIO",7);
		nuevoMozo("ROBAINA, CRISTIAN",5);
		nuevoMozo("BAIGORRIA, SERGIO",7);
		
		
		//Usuarios ========================================================
		nuevoUsuario("admin","1",1,1);
		nuevoUsuario("caja","1",2,1);
		nuevoUsuario("mozo","1",3,1);
		nuevoUsuario("cocina","1",4,1);
		nuevoUsuario("barra","1",5,1);
		nuevoUsuario("cafeteria","1",6,1);
		
		Localidad localidad;
		localidad= new Localidad();
		localidad.setcodPostal(1111);
		localidad.setdireccion("direccion localidad"+1);
		localidad.setidLocalidad(123);
		LocalidadDAO.getInstancia().guardarLocalidad(localidad);
		
		
		//platos, productos proveedores recetas itemreceta localidades =============================
		//armo el proveedor para los productos
		Proveedor prov;
		for(int k=0;k<10;k++){	
			prov = new Proveedor();
			prov.setCuit( "1111111"+ k );
			prov.setLocalidad(localidad);
			prov.setNombre("nombreProv"+k);
			ProveedorDAO.getInstancia().guardarProveedor(prov);
		}
		prov = new Proveedor();
		prov.setCuit("1111111");
		prov.setLocalidad(localidad);
		prov.setNombre("nombreProv");
		ProveedorDAO.getInstancia().guardarProveedor(prov);
		
		ItemReceta ir;
		Producto prod;
		List<Proveedor> proveedorList;
		List<ItemReceta> itemRecetaList = new ArrayList<ItemReceta>();
		
		Receta r = new Receta();

		List<Plato> platosList = new ArrayList<Plato>();
		for(int j=0;j<10;j++){//carga platos
			
			for(int i=0; i<4;i++){//carga productos
				ir = new ItemReceta();
				prod=new Producto();
				prod.setCaducidad("caduci"+(i*j));
				prod.setNombre("nombreProducto"+i +"-"+j);
				prod.setPrecioCompra(10+(i*j));
				prod.setPrecioUso(10+i*(j-1));
				prod.setUnidadCompra("unidadCompra"+i+j);
				prod.setUnidadUso("unidadUso"+i);
				
				proveedorList = new ArrayList<Proveedor>();
				
				proveedorList.add(prov);
				prod.setProveedores(proveedorList);
				
				ir.setCantidad(i);
				ir.setProducto(prod);
				itemRecetaList.add(ir);
			}
			
			r.setNombreReceta("nombreReceta"+j);
			r.setIngresdientes(itemRecetaList);
			Plato plato = new Plato();
			plato.setActivo(true);
			plato.setMargen(10+j);
			plato.setNombrePlato("plato"+j);
			plato.setPrecio(40+j);
			plato.setReceta(r);
			PlatoDAO.getInstancia().guardarPlato(plato);
			platosList.add(plato);
		}
		List<Plato>platosCocina= platosList;
		List<Plato>platosCafeteria= platosList;
		List<Plato>platosBarra= platosList;
		
		Rubro rubroCocina = generaRubro(platosCocina,"Cocina");		
		Rubro rubroCafeteria = generaRubro(platosCafeteria,"Cafeteria");
		Rubro rubroBarra = generaRubro(platosBarra,"Barra");
	
		Carta carta = new Carta();
		carta.setVigente(true);
		List<Rubro> rubros = new ArrayList<Rubro>();
		rubros.add(rubroCocina);
		rubros.add(rubroCafeteria);
		rubros.add(rubroBarra);;
		carta.setRubros(rubros);
		CartaDAO.getInstancia().guardarCarta(carta);
		
		
		
		
		
		
		
		//medios de pago ================================================
		
		MedioPago mp; 
		mp = new MedioPago();
		mp.setDescripcion("Efectivo");
		MedioPagoDAO.getInstancia().guardarMedioPago(mp);
		mp = new MedioPago();
		mp.setDescripcion("Tarjeta Credito");
		MedioPagoDAO.getInstancia().guardarMedioPago(mp);
		mp = new MedioPago();
		mp.setDescripcion("Tarjeta Debito");
		MedioPagoDAO.getInstancia().guardarMedioPago(mp);
		mp = new MedioPago();
		mp.setDescripcion("Cheque");
		MedioPagoDAO.getInstancia().guardarMedioPago(mp);
		
		
		
		//crear comandas ================================================
		String rubroNombre="Cocina";

		//generaComandas("Cocina",12);
		generaComandas("Barra",3);
		//generaComandas("Cafeteria",4);
		
	}
	private static void generaComandas(String rubroNombre, int cantComandas) {
		List<MedioPago> mpList = MedioPagoDAO.getInstancia().obtenerMediosPagos();
		Comanda comanda;
		List<ItemComanda> itemsComanda;
		List<Plato> listaPlatos;
		ItemComanda itemComanda;
		for(int i=0; i<cantComandas;i++){//carga comandas
			comanda=new Comanda();
			comanda.setCantidadPersonas(4);
			comanda.setFecha(Calendar.getInstance());
	
			itemsComanda = new ArrayList<ItemComanda>();
			for(int j=0; j<4;j++){//carga itemComanda con platos
				itemComanda = new ItemComanda();
				listaPlatos = PlatoDAO.getInstancia().obtenerPlatosXRubro(rubroNombre);
				itemComanda.setPlato(listaPlatos.get(j));
				itemsComanda.add(itemComanda);
			}
			comanda.setRubro(rubroNombre);
			comanda.setItemsComanda(itemsComanda);
			comanda.setMedioPago(mpList.get(0));
			List<Mesa> mesas = MesaDAO.getInstancia().obtenerMesas();
			comanda.setMesa(mesas.get(i));
			List<Mozo> mozos = MozoDAO.getInstancia().obtenerMozos();
			comanda.setMozo(mozos.get(0));
			ComandaDAO.getInstancia().guardarComanda(comanda);
		}
	}
	private static Rubro generaRubro(List<Plato> platosList,String nombreRubro) {
		Rubro rubro = new Rubro();
		rubro.setNombreRubro(nombreRubro);
		rubro.setPlatos(platosList);
		RubroDAO.getInstancia().guardarRubro(rubro);
		return rubro;
	}
	
	
	

	
	private static void nuevoMozo(String nombre, int porcentajeComision) {
		Mozo m = new Mozo();
//		m.setIdMozo(idMozo);
		m.setNombre(nombre);
		m.setPorcentajeComision(porcentajeComision);
		MozoDAO.getInstancia().guardarMozo(m);
	}
	
	private static void nuevoUsuario( String nombre,String clave, int tipo,int sucursalId) {
		Usuario u = new Usuario();
		u.setClave(clave);
		u.setNombre(nombre);
		u.setTipo(tipo);
		u.setSucursalId(sucursalId);
		UsuarioDAO.getInstancia().guardarUsuario(u);
		
	}
	
	
	private static void cargarPlanesProduccion ()
	{
		PlanProduccion pp = new PlanProduccion();
		TareaElaboracion te = new TareaElaboracion();
		Receta re = new Receta();
		Producto p = new Producto();
		Plato pla = new Plato();
		ItemReceta ir = new ItemReceta();
		List<ItemReceta> itemRecetaList = new ArrayList<ItemReceta>();
		
		Proveedor prov = new Proveedor();
		prov = ProveedorDAO.getInstancia().obtenerProveXNombre("nombreProv");
		
		List<Proveedor>proves = new ArrayList<Proveedor>();
		proves.add(prov);
		
		p.setNombre("Manteca");
		p.setCaducidad("10-5-2013");
		p.setPrecioCompra(4f);
		p.setPrecioUso(5f);
		p.setProveedores(proves);
		p.setUnidadCompra("KG");
		p.setUnidadUso("G");
		
		ir.setCantidad(10);
		ir.setProducto(p);
		itemRecetaList.add(ir);
		
		
		re.setNombreReceta("Helado");
		re.setIngresdientes(itemRecetaList);
		pla.setActivo(true);
		pla.setMargen(10);
		pla.setNombrePlato("HeladoChocolate");
		pla.setPrecio(15);
		pla.setReceta(re);
		te.setDescripcion("Helados");
		te.setRecetaPlan(re);
		te.setCumplimientoParcial(50f);
		List<TareaElaboracion>tareas = new ArrayList<TareaElaboracion>();
		tareas.add(te);
		pp.setCumplimietoTotal(40f);
		pp.setTareasElaboracion(tareas);
		
		ProductoDAO.getInstancia().guardarProducto(p);
		PlatoDAO.getInstancia().guardarPlato(pla);
		RecetaDAO.getInstancia().guardarReceta(re);
		PlanProduccionDAO.getInstancia().guardarPlanProduccion(pp);
		TareaElaboracionDAO.getInstancia().guardarTareaElaboracion(te);
	}

}
